//////////////////////////////////////////////////////////////////////////////////////////////////////
// 项目名   : Container
// 文件名   : Any.h
// 作者     : Aiye
// 日期     : 2025/9/8 12:10
// 邮箱     : 2878548868@qq.com
// 摘要     : 介绍any
//////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef CONTAINER_ANY_H
#define CONTAINER_ANY_H
#include <any>
#include <iostream>
#include <string>


/**
 * @brief 可以储存任意类型的类型安全容器
 */
class Any
{
public:
    Any()
    {
        // 创建any对象
        std::any val;

        // 存储值
        val = 42; // 存储int
        val = 3.14; // 存储double（替换之前的int）
        val = std::string("Hello"); // 存储string

        // 检查是否有值
        if (val.has_value())
        {
            std::cout << "Has value" << std::endl;
        }

        // 获取值的类型信息
        const std::type_info& ti = val.type();
        std::cout << "Type: " << ti.name() << std::endl;

        // 检索值
        try
        {
            int i = std::any_cast<int>(val);
            std::cout << "int: " << i << std::endl;
        } catch (const std::bad_any_cast& e)
        {
            std::cout << "Not an int: " << e.what() << std::endl;
        }

        // 安全检索（返回指针）
        if (auto ptr = std::any_cast<std::string>(&val))
        {
            std::cout << "string: " << *ptr << std::endl;
        }

        // 重置any对象
        val.reset();
        if (!val.has_value())
        {
            std::cout << "Any is empty" << std::endl;
        }

        // 使用emplace直接构造值
        val.emplace<std::string>("Hello World");
    }
};
#endif //CONTAINER_ANY_H